package org.eiahe.hr.interview.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.eiahe.hr.interview.domain.InterviewQuestionBank;
import org.eiahe.hr.interview.domain.dto.InterviewQuestionBankDTO;
import org.eiahe.hr.interview.domain.vo.InterviewQuestionBankVo;
import org.eiahe.hr.interview.domain.dto.InterviewQuestionBankQueryDTO;

import java.util.List;

/**
 * @author :zhangnn
 * @className :InterviewInterviewQuestionBankVo
 * @description: TODO
 * @date 2025-08-19 14:11:14
 */
public interface InterviewQuestionBankService extends IService<InterviewQuestionBank> {
    /**
     * 分页查询题库列表
     *
     * @param queryDTO 查询条件
     * @param pageQuery 分页参数
     * @return 分页结果
     */
    TableDataInfo<InterviewQuestionBankVo> selectQuestionBankPage(InterviewQuestionBankQueryDTO queryDTO, PageQuery pageQuery);

    /**
     * 查询所有可用的题库（未删除的）
     *
     * @return 题库列表
     */
    List<InterviewQuestionBankDTO> selectAllEnabled();

    /**
     * 根据ID查询题库详情
     *
     * @param id 题库ID
     * @return 题库详情
     */
    InterviewQuestionBankDTO selectById(Long id);

    /**
     * 新增题库
     *
     * @param bankDTO 题库信息
     * @return 是否成功
     */
    boolean insertQuestionBank(InterviewQuestionBankDTO bankDTO);

    /**
     * 更新题库
     *
     * @param bankDTO 题库信息
     * @return 是否成功
     */
    boolean updateQuestionBank(InterviewQuestionBankDTO bankDTO);

    /**
     * 删除题库（逻辑删除）
     *
     * @param id 题库ID
     * @return 是否成功
     */
    boolean deleteQuestionBank(Long id);

    /**
     * 批量删除题库（逻辑删除）
     *
     * @param ids 题库ID列表
     * @return 是否成功
     */
    boolean deleteQuestionBankByIds(List<Long> ids);

    /**
     * 检查题库名称是否存在
     *
     * @param bankName 题库名称
     * @return 是否存在
     */
    boolean checkBankNameExists(String bankName);

    /**
     * 检查题库名称是否存在（排除指定ID）
     *
     * @param bankName 题库名称
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean checkBankNameExistsExclude(String bankName, Long excludeId);

    /**
     * 根据父级ID查询子题库列表
     *
     * @param parentId 父级ID
     * @return 子题库列表
     */
    List<InterviewQuestionBankDTO> selectByParentId(Long parentId);
}
